// // 请求的工具类
// import axios from "axios";
// import {ElMessage} from "element-plus";
//
// const request = axios.create({
//     baseURL: 'http://localhost:8080',
//     timeout: 30000   //后端接口超时时间
// })
//
// //request拦截器
// // 可以自请求发送前对请求做一些处理
// request.interceptors.request.use(config => {
//     config.headers['Content-Type'] = 'application/json;charset=uft-8';
//     return config
// }, error => {
//     return Promise.reject(error)
// });
//
// //requet拦截器
// // 可以在接口响应后统一处理结果
// request.interceptors.response.use(
//     response => {
//         let res = response.data;
//
//         // 如果是返回的文件
//         if (response.config.responseType === 'blob') {
//             return res;
//         }
//
//         //兼容服务器返回的字符串数据
//         if (typeof res === 'string') {
//             res = res ? JSON.parse(res) : res
//         }
//         return res;
//     },
//     error => {
//         if (error.response.status === 404) {
//             ElMessage.error('未找到请求接口')
//         } else if (error.response.status === 500) {
//             ElMessage.error('系统异常，请查看后端控制台报错')
//         } else {
//             console.error(error.message())
//         }
//         return Promise.reject(error)
//     }
// )
// export default request

import axios from "axios";
import { ElMessage } from "element-plus";
// import { el } from "element-plus/es/locale";

const request = axios.create({
  baseURL: "http://localhost:8080",
  timeout: 30000, // 后端接口超时时间
});

// request拦截器 - 请求发送前处理
// 在请求拦截器中添加 token 有效性验证
request.interceptors.request.use(
  (config) => {
    config.headers["Content-Type"] = "application/json;charset=utf-8";

    const token = localStorage.getItem("xm-pro-token");
    if (token) {
      // 假设 token 存储了过期时间
      const tokenExpiration = localStorage.getItem("xm-pro-token-expiration");
      const currentTime = Date.now();
      if (tokenExpiration && currentTime > parseInt(tokenExpiration)) {
        // token 已过期，清除 token 并重定向到登录页
        localStorage.removeItem("xm-pro-token");
        localStorage.removeItem("xm-pro-token-expiration");
        window.location.href = "/login";
        return Promise.reject(new Error("Token 已过期"));
      }

      config.headers["Authorization"] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// response拦截器 - 响应统一处理
request.interceptors.response.use(
  (response) => {
    let res = response.data;

    // 如果是返回的文件
    if (response.config.responseType === "blob") {
      return res;
    }

    // 兼容服务器返回的字符串数据
    if (typeof res === "string") {
      res = res ? JSON.parse(res) : res;
    }

    // 如果token过期或无效，后端返回401状态码
    if (res.code === 401) {
      ElMessage.error(res.msg || "登录已过期，请重新登录");
      localStorage.removeItem("xm-pro-user");
      window.location.href = "/login";
      return Promise.reject(res);
    }

    return res;
  },
  (error) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          ElMessage.error("登录已过期，请重新登录");
          localStorage.removeItem("xm-pro-user");
          window.location.href = "/login";
          break;
        case 404:
          ElMessage.error("未找到请求接口");
          break;
        case 500:
          ElMessage.error("系统异常，请查看后端控制台报错");
          break;
        default:
          ElMessage.error(error.response.data.msg || "请求失败");
      }
    } else {
      ElMessage.error("请求超时或网络错误");
    }
    return Promise.reject(error);
  }
);

export default request;
